package com.itbaizhan.crawler;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

//Crawler 爬行者
/*使用Jsoup完成网页爬虫*/
//1,导入Jsoup的jar包
public class CrawlerDemo {

    public static void main(String[] args) throws IOException {
        /*int min = 9749276;
        int max = 9749394;*/
        /*给用户的是class文件，不可以修改min/max，所以用起来不方便，另外配置一个XML配置文件修改数据*/
        int min = 0;
        int max = 0;
        //解析配置文件
        //获取配置文件的路径
        String path = CrawlerDemo.class.getClassLoader().getResource("com/itbaizhan/crawler/Crawler.xml").getPath();
        //转为document 对象
        Document document1 = Jsoup.parse(new File(path),"utf-8");
        //获取元素对象  根据标签获取
        Elements minEle = document1.getElementsByTag("min");
        Elements maxEle = document1.getElementsByTag("max");
        min =Integer.parseInt(minEle.get(0).text());//强转为int类型Integer.parseInt()
        max = Integer.parseInt(maxEle.get(0).text());
        for(int i=min;i<=max;i++){
            try{
                //2，使用Jsoup获取网页HTML源文件，转为Document对象
                Document document = Jsoup.parse(new URL("https://daily.zhihu.com/story/"+i),4000);
                //System.out.println(document); //查看获取到的源文件
                //3,通过Document对象，获取需要的Element对象
                //网页源文件与document获取的html可能不同，以document 为准
                //获取图片，根据属性=值
                Elements headerImg = document.getElementsByAttributeValue("alt","头图");
                Elements titleEle = document.select(".question-title");
                Elements authorEle= document.select(".author");
                Elements contentEle = document.select(".content");
                //4,获取Elements 对象的数据  Elements是集合，所以获得下标
                //图片要拿到src属性
                System.out.println(headerImg.get(0).attr("src"));
                System.out.println(titleEle.get(0).text());//text() 文本
                System.out.println(authorEle.get(0).text());
                System.out.println(contentEle.get(0).text());
            }catch (Exception e){}
        }


    }
}
